package GUI
{
	import DAL.*;
	import DAL.LoginDAO;
	
	import MUNDO.*;
	
	import flash.display.TriangleCulling;
	import flash.events.*;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	import flash.text.TextFormat;
	
	import playerio.*;
	
	import sample.ui.components.Component;
	public class Perfil
	{
		//Atributos
		private var _iniciarButton:IniciarButton = new IniciarButton();		//Boton de iniciar
		private var _modificarButton:ModificarButton = new ModificarButton();//Boton de modificar
		private var _eliminarButton:EliminarButton = new EliminarButton();  //Boton de eliminar
		private var _siButton:SiButton = new SiButton();					//Boton de si eliminar
		private var _noButton:NoButton = new NoButton();					//Boton de no eliminar
		private var aEliminar:Array = new Array();							//arreglo de usuarios a eliminar
		private var _triviador:Triviador;									//Instancia de la clase triviador
		private var _nombre:TextField = new TextField();					//Nombre de Usuario
		private var _contrasenia:TextField = new TextField();				//Contraseña
		private var _nivel:TextField = new TextField();						//nivel
		private var _puntaje:TextField = new TextField();					//puntaje
		private var _nombreM:TextField = new TextField();					//Nombre de Usuario Modificar
		private var _contraseniaM:TextField = new TextField();				//Contraseña Modificar
		private var _contraseniaMrepetir:TextField = new TextField();		//Repetir Contraseña Modificar
		private var _asterisco1:TextField = new TextField();				//Asterisco de validación de Nombre de Usuario
		private var _asterisco2:TextField = new TextField();				//Asterisco de validación de Contraseña
		private var _asterisco3:TextField = new TextField();				//Asterisco de validación de Contraseña 2
		private var _mensajeError:TextField = new TextField();				//Mensaje de error de validación
		private var _modificarFinal: ModificarButton = new ModificarButton();//Boton de modificar usuario
		
		//Constructor
		/**
		 * Constructor de la clase Perfil
		 * @param triviador 
		 */
		public function Perfil(triviador:Triviador)
		{
			_triviador = triviador;
		}
		
		/**
		 * Función que configura las propiedades de los elementos gráficos a mostrar en el perfil de usuario.
		 */
		public function crearPerfil():void{
			//Construccion del campo para ingresar el nombre
			_nombre.type = TextFieldType.DYNAMIC;
			_nombre.height = 32,20;
			_nombre.width = 213;
			_nombre.x = 297;
			_nombre.y = 108;
			_nombre.defaultTextFormat = Utils.formatearTitulos();
			_nombre.textColor = 0x040E1D;
			//Construccion del campo para ingresar el nivel
			_nivel.type = TextFieldType.DYNAMIC;
			_nivel.height = 32,20;
			_nivel.width = 213;
			_nivel.x = 297;
			_nivel.y = 225;
			_nivel.defaultTextFormat = Utils.formatearTitulos();
			_nivel.textColor = 0x040E1D;
			//Construccion del campo para ingresar el puntaje
			_puntaje.type = TextFieldType.DYNAMIC;
			_puntaje.height = 32,20;
			_puntaje.width = 213;
			_puntaje.x = 297;
			_puntaje.y = 280;
			_puntaje.defaultTextFormat = Utils.formatearTitulos();
			_puntaje.textColor = 0x040E1D;
			//Construccion del campo para ingresar la contraseña
			_contrasenia.type = TextFieldType.DYNAMIC;
			_contrasenia.displayAsPassword = true;
			_contrasenia.height = 32,20;
			_contrasenia.width = 213;
			_contrasenia.x = 293;
			_contrasenia.y = 170;
			_contrasenia.defaultTextFormat = Utils.formatearTitulos();
			_contrasenia.textColor = 0x040E1D;
			Partida.client.bigDB.load("Jugador", Partida.jugador.nombre,
				function(obj:DatabaseObject):void{
					_nombre.text = Partida.jugador.nombre;
					_contrasenia.text = obj.pass;
					_nivel.text = obj.nivel.toString();
					_puntaje.text = obj.puntaje.toString();
				});
			_triviador.addChild(_nombre);
			_triviador.addChild(_contrasenia);
			_triviador.addChild(_nivel);
			_triviador.addChild(_puntaje);
			_eliminarButton.x = 475;
			_eliminarButton.y = 350;
			_eliminarButton.addEventListener(MouseEvent.CLICK, onEliminarClick);
			_triviador.addChild(_eliminarButton);
			_iniciarButton.x = 189;
			_iniciarButton.y = 350;
			_iniciarButton.addEventListener(MouseEvent.CLICK, onIniciarClick);
			_triviador.addChild(_iniciarButton);
			_modificarButton.x = 331;
			_modificarButton.y = 350;
			_triviador.addChild(_modificarButton);
			_modificarButton.addEventListener(MouseEvent.CLICK, ubicarElementosGaficos);
		}
		
		
		/**
		 * Funcion que ubica los elementos de la escena e indica a cual escena debe de dirigirse
		 * @param me El evento que ha generado el usuario al dar click al boton modificar.
		 */
		public function ubicarElementosGaficos(me:MouseEvent):void{
			_triviador.removeChild(_iniciarButton);
			_triviador.removeChild(_eliminarButton);
			_triviador.removeChild(_modificarButton);
			_triviador.removeChild(_nombre);
			_triviador.removeChild(_contrasenia);
			_triviador.removeChild(_nivel);
			_triviador.removeChild(_puntaje);
			_triviador.gotoAndStop(1, "Escena 15");
			
			//Construccion del campo para ingresar el nombre
			_nombreM.type = TextFieldType.INPUT;
			_nombreM.height = 32,20;
			_nombreM.width = 213;
			_nombreM.x = 297;
			_nombreM.y = 108;
			_nombreM.defaultTextFormat = Utils.formatearTitulos();
			_nombreM.textColor = 0x040E1D;
			_nombreM.text = Partida.jugador.nombre;
			//Construccion del campo para ingresar la contraseña
			_contraseniaM.type = TextFieldType.INPUT;
			_contraseniaM.displayAsPassword = true;
			_contraseniaM.height = 32,20;
			_contraseniaM.width = 213;
			_contraseniaM.x = 281;
			_contraseniaM.y = 183;
			_contraseniaM.defaultTextFormat = Utils.formatearTitulos();
			_contraseniaM.textColor = 0x040E1D;
			//Construccion del campo para ingresar repetir la contraseña
			_contraseniaMrepetir.type = TextFieldType.INPUT;
			_contraseniaMrepetir.displayAsPassword = true;
			_contraseniaMrepetir.height = 32,20;
			_contraseniaMrepetir.width = 213;
			_contraseniaMrepetir.x = 281;
			_contraseniaMrepetir.y = 244;
			_contraseniaMrepetir.defaultTextFormat = Utils.formatearTitulos();
			_contraseniaMrepetir.textColor = 0x040E1D;
			
			_triviador.addChild(_nombreM);
			_triviador.addChild(_contraseniaM);
			_triviador.addChild(_contraseniaMrepetir);
			
			
			_modificarFinal.x= 320;
			_modificarFinal.y= 290;
			_modificarFinal.addEventListener(MouseEvent.CLICK, onModificarClick);
			_triviador.addChild(_modificarFinal);
		}
		
		/**
		 * Esta funcion se ejecuta al oprimir el boton Modificar. Se comprueba que se ha
		 * escrito un nombre de usuario, contraseña y se repite la contraseña.
		 * @param me El evento que ha generado el usuario al dar click al boton Modificar.
		 */
		public  function onModificarClick(me:MouseEvent):void{
			
			var falta:Boolean = false;
			var bandera:Boolean = false;
			_asterisco1.text = "";
			_asterisco2.text = "";
			_asterisco3.text = "";
			_mensajeError.text = "";
			_mensajeError.width = 200;
			_mensajeError.height = 30;
			
			_asterisco1.x = 280;
			_asterisco1.y = 85;
			_asterisco1.width = 10;
			_triviador.addChild(_asterisco1);
			
			_asterisco2.x = 280;
			_asterisco2.y = 150;
			_asterisco2.width = 10;
			_triviador.addChild(_asterisco2);
			
			_asterisco3.x = 280;
			_asterisco3.y = 215;
			_asterisco3.width = 10;
			_triviador.addChild(_asterisco3);
			_triviador.addChild(_mensajeError);
			
			
			if (_nombreM.text.length == 0){
				
				_asterisco1.text = "*";
				_asterisco1.setTextFormat(Utils.formatearErrores());
				falta = true;
			}
			if (_contraseniaM.text.length == 0){
				
				_asterisco2.text = "*";
				_asterisco2.setTextFormat(Utils.formatearErrores());
				falta = true;
			}
			if (_contraseniaMrepetir.text.length == 0) {
				
				_asterisco3.text = "*";
				_asterisco3.setTextFormat(Utils.formatearErrores());
				falta = true;
			}
			
			var modificarDAO:ModificarDAO = new ModificarDAO(_triviador);
			
			if (falta) {
				_mensajeError.x = 328;
				_mensajeError.y = 70;
				_mensajeError.height = 20;
				_mensajeError.text = "* Campo Obligatorio.";
				_mensajeError.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_mensajeError);
			} 
			else if (_contraseniaM.text != _contraseniaMrepetir.text)
			{
				_mensajeError.x = 295;
				_mensajeError.y = 70;
				_mensajeError.height = 20;
				_mensajeError.text = "LAS CONTRASEÑAS NO COINCIDEN";
				_mensajeError.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_mensajeError);
			}
			else 
			{
				modificarDAO.modificarUsuario(_nombreM.text, _contraseniaM.text,this);
				_triviador.removeChild(_nombreM);
				_triviador.removeChild(_contraseniaM);
				_triviador.removeChild(_contraseniaMrepetir);
				_triviador.removeChild(_modificarFinal);
			}
			
			
		}
		
		/**
		 * Esta funcion se ejecuta al oprimir el boton iniciar sesion. Se remueve lo que se realizó 
		 * en la escena anterior y se establece conexion con el servidor.
		 * @param me El evento que ha generado el usuario al dar click al boton Iniciar.
		 */
		public  function onIniciarClick(me:MouseEvent):void{
			_triviador.gotoAndStop(2, "Escena 1");
			_triviador.removeChild(_iniciarButton);
			_triviador.removeChild(_eliminarButton);
			_triviador.removeChild(_modificarButton);
			_triviador.removeChild(_nombre);
			_triviador.removeChild(_contrasenia);
			_triviador.removeChild(_nivel);
			_triviador.removeChild(_puntaje);
			Partida.conexion.conectar();
		}
		
		/**
		 * Esta funcion se ejecuta al oprimir el boton Eliminar. Se remueve lo que se realizó 
		 * en la escena anterior, se pregunta al usuario si desea eliminar
		 * @param me El evento que ha generado el usuario al dar click al boton Eliminar.
		 */
		public function onEliminarClick(me:MouseEvent):void{
			_triviador.removeChild(_iniciarButton);
			_triviador.removeChild(_eliminarButton);
			_triviador.removeChild(_modificarButton);
			_triviador.removeChild(_nombre);
			_triviador.removeChild(_contrasenia);
			_triviador.removeChild(_nivel);
			_triviador.removeChild(_puntaje);
			_triviador.gotoAndStop(2, "Escena 14");
			_siButton.x = 264;
			_siButton.y = 300;
			_noButton.x = 419;
			_noButton.y = 300;
			_siButton.addEventListener(MouseEvent.CLICK, onSiClick);
			_noButton.addEventListener(MouseEvent.CLICK, onNoClick);
			_triviador.addChild(_siButton);
			_triviador.addChild(_noButton);	
		}
		
		/**
		 * Esta funcion se ejecuta al oprimir el boton Si. Se elimina el jugador y se vuelve al login
		 * @param me El evento que ha generado el usuario al dar click al boton Si.
		 */
		public function onSiClick(me:MouseEvent):void{
			var login:Login = new Login(_triviador);
			login.mostrarLogin();
			aEliminar.push(Partida.jugador.nombre);
			
			trace ("Eliminando Jugador");
			Partida.client.bigDB.deleteKeys("Jugador",aEliminar,null, null);

			_triviador.removeChild(_siButton);
			_triviador.removeChild(_noButton);
		}
		
		/**
		 * Esta funcion se ejecuta al oprimir el boton NO. Se crea el perfil del jugador y se difige a la escena 
		 * @param me El evento que ha generado el usuario al dar click al boton NO.
		 */
		public  function onNoClick(me:MouseEvent):void{
			_triviador.gotoAndStop(1, "Escena 14");
			crearPerfil();
			_triviador.removeChild(_siButton);
			_triviador.removeChild(_noButton);
		}
		
	}
}